package com.kws.merchant.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kws.merchant.domain.Contract;
import com.kws.merchant.domain.po.ContractPo;
import com.kws.merchant.domain.po.CreateContractPo;
import com.kws.merchant.domain.po.SignLinkPo;
import com.kws.system.api.domain.QuerySignUrlRq;
import com.kws.system.api.domain.SignFlowRevoke;

/**
 * 合同管理-合同(Contract)表服务接口
 *
 * @author yxy
 * @since 2024-10-29 15:37:31
 */
public interface ContractService extends IService<Contract> {

    /**
     * 分页查询列表
     */
    Page<Contract> pageList(ContractPo contractPo);

    /**
     * 新增合同
     * @param contract
     * @return
     */
    boolean addContract(Contract contract);

    /**
     * 合同详情
     * @param id
     * @return
     */
    Contract detailById(Long id);

    /**
     * 创建合同--前端无需调用创建合同接口，生成订单时自动调用
     * @param createContractPo
     * @return
     */
    Object createContract(CreateContractPo createContractPo);

    /**
     * 获取签署链接
     * @return
     */
    Object signLink(SignLinkPo signLinkPo);

    /**
     * 下载已签署文件--未签署完成的文件不可下载
     * @param signFlowId
     * @return
     */
    String fileDownloadUrl(String signFlowId);

    /**
     * 查看合同--免登录，任何人可查看
     * @param signFlowId
     * @return
     */
    String signViewLink(String signFlowId);

    /**
     * 回调通知
     * @param json
     * @return
     */
    Boolean callBackUrl(JSONObject json);

    /**
     * 撤销签署流程
     * @param signFlowRevoke
     * @return
     */
    Boolean signFlowRevoke(SignFlowRevoke signFlowRevoke);
}
